package com.zwj.design.creating.factory;

import com.zwj.design.creating.factory.factory.Dialog;
import com.zwj.design.creating.factory.factory.HtmlDialog;
import com.zwj.design.creating.factory.factory.WindowsDialog;

/**
 * 工厂方法模式
 * 客户端
 * @author 张文接
 * @version 1.0
 * @createTime 2024/3/11 14:56
 */
public class Demo {
    private static final String osName = "Windows 10";
    private static final String osName2 = "html";
    private static Dialog dialog;

    public static void main(String[] args) {
        configure(osName2);
        runBusinessLogic();
    }

    /**
     * 具体工厂类通常根据配置或环境选项来选定。
     *
     * @param osName 产品名
     * @return 基础创建者
     */
    static void configure(String osName) {
        if (osName.equals("Windows 10")) {
            dialog = new WindowsDialog();
        } else {
            dialog = new HtmlDialog();
        }
    }

    /**
     * 所有的客户端代码应当通过抽象接口与工厂和产品进行交互。
     * 这样一来，客户端代码就不必关心它所使用的具体是哪个工厂，以及该工厂返回的产品类型是什么。
     */
    static void runBusinessLogic() {
        dialog.renderWindow();
    }
}
